import pythoncom, time, win32api
from win32com.taskscheduler import taskscheduler
test_task_name='test_addtask_1.job'

ts=pythoncom.CoCreateInstance(taskscheduler.CLSID_CTaskScheduler,None,
                              pythoncom.CLSCTX_INPROC_SERVER,taskscheduler.IID_ITaskScheduler)

tasks=ts.Enum()
for task in tasks:
    print(task)
if test_task_name in tasks:
    print('Deleting existing task '+test_task_name)
    ts.Delete(test_task_name)

new_task=pythoncom.CoCreateInstance(taskscheduler.CLSID_CTask,None,
                              pythoncom.CLSCTX_INPROC_SERVER,taskscheduler.IID_ITask)
ts.AddWorkItem(test_task_name,new_task)  ## task object is modified in place

new_task.SetFlags(taskscheduler.TASK_FLAG_INTERACTIVE|taskscheduler.TASK_FLAG_RUN_ONLY_IF_LOGGED_ON)
new_task.SetIdleWait(1,10000)
new_task.SetComment('test task with idle trigger')
new_task.SetApplicationName('c:\\python23\\python.exe')
new_task.SetPriority(taskscheduler.REALTIME_PRIORITY_CLASS)
new_task.SetParameters('-c"import win32ui,time;win32ui.MessageBox(\'why aint you doing no work ?\');"')
new_task.SetWorkingDirectory('c:\\python23')
new_task.SetCreator('test_addtask_1.py')
new_task.SetAccountInformation(win32api.GetUserName(),None)
## None is only valid for local system acct or if Flags contain TASK_FLAG_RUN_ONLY_IF_LOGGED_ON


run_time = time.localtime(time.time() + 30)
end_time = time.localtime(time.time() + 60*60*24)

tr_ind, tr=new_task.CreateTrigger()
tt=tr.GetTrigger()
tt.TriggerType=taskscheduler.TASK_EVENT_TRIGGER_ON_IDLE
tt.Flags=taskscheduler.TASK_TRIGGER_FLAG_HAS_END_DATE

tt.BeginYear=int(time.strftime('%Y',run_time))
tt.BeginMonth=int(time.strftime('%m',run_time))
tt.BeginDay=int(time.strftime('%d',run_time))
tt.StartMinute=int(time.strftime('%M',run_time))
tt.StartHour=int(time.strftime('%H',run_time))

tt.EndYear=int(time.strftime('%Y',end_time))
tt.EndMonth=int(time.strftime('%m',end_time))
tt.EndDay=int(time.strftime('%d',end_time))

tr.SetTrigger(tt)
print(new_task.GetTriggerString(tr_ind))

pf=new_task.QueryInterface(pythoncom.IID_IPersistFile)
pf.Save(None,1)
